---
title: Sui Move CLI
description: The Sui CLI move command provides commands for working with Move source code directly from a terminal or console.
---

The Sui CLI `move` command provides several commands for working with Move source code. A typical usage of `sui move` is to compile and test the Move code, or to generate a new Move project by using `sui move new project_name`, which creates the needed directories and the `Move.toml` file.

{@include: ../../snippets/cli-check-install.mdx}

## Commands

Typing `sui move --help` into your terminal or console displays the following information on available commands.

```
Usage: sui move [OPTIONS] <COMMAND>

Commands:
  build
  coverage 	  Inspect test coverage for this package. A previous test run with the `--coverage` flag must have previously been run
  disassemble
  manage-package  Record addresses (Object IDs) for where this package is published on chain (this command sets variables in Move.lock)
  migrate         Migrate to Move 2024 for the package at `path`. If no path is provided defaults to current directory
  new             Create a new Move package with name `name` at `path`. If `path` is not provided the package will be created in the directory `name`
  test     	  Run Move unit tests in this package
  help            Print this message or the help of the given subcommand(s)

Options:
  -p, --path <PACKAGE_PATH>                 	Path to a package which the command should be run with respect to
  -d, --dev                                 	Compile in 'dev' mode. The 'dev-addresses' and 'dev-dependencies' fields will be used if this flag is set. This flag is useful for
                                            	development of packages that expose named addresses that are not set to a specific value
  	--test                                	Compile in 'test' mode. The 'dev-addresses' and 'dev-dependencies' fields will be used along with any code in the 'tests' directory
  	--doc                                 	Generate documentation for packages
  	--abi                                 	Generate ABIs for packages
  	--install-dir <INSTALL_DIR>           	Installation directory for compiled artifacts. Defaults to current directory
  	--force                               	Force recompilation of all packages
  	--fetch-deps-only                     	Only fetch dependency repos to MOVE_HOME
  	--skip-fetch-latest-git-deps          	Skip fetching latest git dependencies
  	--default-move-flavor <DEFAULT_FLAVOR>	Default flavor for move compilation, if not specified in the package's config
  	--default-move-edition <DEFAULT_EDITION>  Default edition for move compilation, if not specified in the package's config
  	--dependencies-are-root               	If set, dependency packages are treated as root packages. Notably, this will remove warning suppression in dependency packages
  -h, --help                                	Print help
  -V, --version                             	Print version
```

## Examples

The following examples demonstrate some of the most often used commands.

### Create a new Move project

To create a new Move project that automatically adds the necessary dependencies in a `Move.toml` file, run `sui move new [<PROJECT-NAME>]`.

```shell
$ sui move new smart_contract_test
$ ls -l smart_contract_test
Move.toml
Sources

# display the contents of Move.toml file
$ cat smart_contract_test/Move.toml
[package]
name = "smart_contract_test"
version = "0.0.1"

[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" }

[addresses]
smart_contract_test = "0x0"
```

### Build a Move project

Use `sui move build` at the root of your Move project to build the package.

```shell
$ sui move build
UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING smart_contract_test
```

### Run tests in a Move project

Use `sui move test` to run the tests in a Move package.

```shell
$ sui move test
UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING smart_contract_test
Running Move unit tests
Test result: OK. Total tests: 0; passed: 0; failed: 0
```

### Get test coverage for a module


:::caution

This command currently only works on debug builds of the CLI.  Please build the CLI from source to use it.

:::


This example uses [`first_package`](https://github.com/MystenLabs/sui/tree/main/examples/move/first_package) Move package.

To get the a summary of the test coverage, you must first run the `sui move test --coverage` command, and then the `sui move coverage summary --test` to get a summary of the test coverage in the example project.

```shell
$ sui move test --coverage
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING first_package
Running Move unit tests
[ PASS    ] 0x0::example::test_module_init
[ PASS    ] 0x0::example::test_sword_transactions
Test result: OK. Total tests: 2; passed: 2; failed: 0

$ sui move coverage summary --test
+-------------------------+
| Move Coverage Summary   |
+-------------------------+
Module 0000000000000000000000000000000000000000000000000000000000000000::example
>>> % Module coverage: 92.81
+-------------------------+
| % Move Coverage: 92.81  |
+-------------------------+
```

## Help

Each command has its own help section. For example `sui move build –help` displays the following prompt:

```shell
$ sui move build --help
Usage: sui move build [OPTIONS]

Options:
  -p, --path <PACKAGE_PATH>                 	Path to a package which the command should be run with respect to
  	--with-unpublished-dependencies       	Include the contents of packages in dependencies that haven't been published (only relevant when dumping bytecode as base64)
  -d, --dev                                 	Compile in 'dev' mode. The 'dev-addresses' and 'dev-dependencies' fields will be used if this flag is set. This flag is useful for development
                                            	of packages that expose named addresses that are not set to a specific value
  	--dump-bytecode-as-base64             	Whether we are printing in base64
  	--generate-struct-layouts             	If true, generate struct layout schemas for all struct types passed into `entry` functions declared by modules in this package These layout
                                            	schemas can be consumed by clients (e.g., the TypeScript SDK) to enable serialization/deserialization of transaction arguments and events
  	--test                                	Compile in 'test' mode. The 'dev-addresses' and 'dev-dependencies' fields will be used along with any code in the 'tests' directory
  	--doc                                 	Generate documentation for packages
  	--lint                                	If `true`, enable linters
  	--abi                                 	Generate ABIs for packages
  	--install-dir <INSTALL_DIR>           	Installation directory for compiled artifacts. Defaults to current directory
  	--force                               	Force recompilation of all packages
  	--fetch-deps-only                     	Only fetch dependency repos to MOVE_HOME
  	--skip-fetch-latest-git-deps          	Skip fetching latest git dependencies
  	--default-move-flavor <DEFAULT_FLAVOR>	Default flavor for move compilation, if not specified in the package's config
  	--default-move-edition <DEFAULT_EDITION>  Default edition for move compilation, if not specified in the package's config
  	--dependencies-are-root               	If set, dependency packages are treated as root packages. Notably, this will remove warning suppression in dependency packages
  -h, --help                                	Print help
```
